public class Main {
    public static void main(String[] args) {
        //equals的jdk源码
//        public boolean equals(Object anObject) {
//            if (this == anObject) {
//                return true;
//            }
//            if (anObject instanceof String) {
//                String anotherString = (String)anObject;
//                int n = value.length;
//                if (n == anotherString.value.length) {
//                    char v1[] = value;
//                    char v2[] = anotherString.value;
//                    int i = 0;
//                    while (n-- != 0) {
//                        if (v1[i] != v2[i])
//                            return false;
//                        i++;
//                    }
//                    return true;
//                }
//            }
//            return false;
//        }
        String s1 = "abc";
        String s2 = "abc";//创建常量池中的对象，如果"abc"已存在于常量池，s将直接引用该对象而不会创建新对象
        System.out.println(s1.equals(s2));//true
        System.out.println(s1 == s2);//true//==判断地址是否相等

        String str1 = new String("abc");
        String str2 = new String("abc");//创建堆中的对象，每次通过new关键字在堆中创建一个新的对象
        System.out.println(str1.equals(str2));//true
        System.out.println(str1 == str2);//false//==判断地址是否相等


//equals的jdk源码
//        public boolean equals(Object obj) {
//            if (obj instanceof Integer) {
//                return value == ((Integer)obj).intValue();
//            }
//            return false;
//        }
        Integer integer1 = new Integer(1000);
        Integer integer2 = new Integer(1000);
        System.out.println(integer1.equals(integer2));//true
        System.out.println(integer1 == integer2);//false

//equals的jdk源码
//        public boolean equals(Object obj) {
//            return (this == obj);
//        }
        Object a=new Object();
        Object b=new Object();
        System.out.println(a.equals(b));
    }
}

